package br.com.consultsystems.dominio.cadastro;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

import br.com.consultsystems.dominio.tipos.EstadosBrasil;
import br.com.consultsystems.dominio.tipos.TipoFornecedor;

@Entity
@Table(name = "fornecedor")
@SequenceGenerator(name = "operacao", sequenceName = "operacao",  allocationSize = 1)
@XmlRootElement
public class Fornecedor implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -5051966374981614688L;

	@Id
	@Column(name = "id", nullable = false, insertable = true, updatable = false)
	@GeneratedValue(generator = "operacao", strategy = GenerationType.SEQUENCE)
	private Long id;
	
	@Column(name = "fantasia", nullable = false, insertable = true, updatable = true, length = 200)
	private String fantasia;

	@Column(name = "razaosocial", nullable = false, insertable = true, updatable = true, length = 200)
	private String razaoSocial;

	@Column(name = "cnpjcpf", nullable = false, insertable = true, updatable = true, length = 20)
	private String cnpjcpf;

	@Column(name = "ierg", nullable = false, insertable = true, updatable = true, length = 20)
	private String ierg;

	@Column(name = "tipo", nullable = false, insertable = true, updatable = true, length = 10)
	@Enumerated(EnumType.STRING)
	private TipoFornecedor tipo;
	
	@Column(name = "endereco", nullable = false, insertable = true, updatable = true, length = 255)
	private String endereco;

	@Column(name = "bairro", nullable = false, insertable = true, updatable = true, length = 50)
	private String bairro;

	@Column(name = "cidade", nullable = false, insertable = true, updatable = true, length = 100)
	private String cidade;

	@Column(name = "estado", nullable = false, insertable = true, updatable = true, length = 2)
	@Enumerated(EnumType.STRING)
	private EstadosBrasil estado;

	@Column(name = "fone", nullable = false, insertable = true, updatable = true, length = 20)
	private String fone;

	@Column(name = "fax", nullable = false, insertable = true, updatable = true, length = 20)
	private String fax;

	@Column(name = "celular", nullable = false, insertable = true, updatable = true, length = 20)
	private String celular;
	
	@Column(name = "cep", nullable = false, insertable = true, updatable = true, length = 9)
	private String cep;

	@Column(name = "contato", nullable = false, insertable = true, updatable = true, length = 200)
	private String contato;

	@Column(name = "email", nullable = false, insertable = true, updatable = true, length = 200)
	private String email;

	@Column(name = "site", nullable = false, insertable = true, updatable = true, length = 200)
	private String site;

	@Column(name = "complemento", nullable = false, insertable = true, updatable = true, length = 40)
	private String complemento;
	
	@ManyToOne
	@JoinColumn(name = "id_ramoatividade", nullable = false, insertable = true, updatable = true)
	private RamoAtividade ramoAtividade;	

	@Column(name = "datacadastro", nullable = false, insertable = true, updatable = false)
	@Temporal(TemporalType.DATE)
	private Date dataCadastro;
	
	public Fornecedor() {
		super();
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getFantasia() {
		return fantasia;
	}

	public void setFantasia(String fantasia) {
		this.fantasia = fantasia;
	}

	public String getRazaoSocial() {
		return razaoSocial;
	}

	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}

	public String getCnpjcpf() {
		return cnpjcpf;
	}

	public void setCnpjcpf(String cnpjcpf) {
		this.cnpjcpf = cnpjcpf;
	}

	public String getIerg() {
		return ierg;
	}

	public void setIerg(String ierg) {
		this.ierg = ierg;
	}

	public TipoFornecedor getTipo() {
		return tipo;
	}

	public void setTipo(TipoFornecedor tipo) {
		this.tipo = tipo;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public EstadosBrasil getEstado() {
		return estado;
	}

	public void setEstado(EstadosBrasil estado) {
		this.estado = estado;
	}

	public String getFone() {
		return fone;
	}

	public void setFone(String fone) {
		this.fone = fone;
	}

	public String getFax() {
		return fax;
	}

	public void setFax(String fax) {
		this.fax = fax;
	}

	public String getCelular() {
		return celular;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getContato() {
		return contato;
	}

	public void setContato(String contato) {
		this.contato = contato;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSite() {
		return site;
	}

	public void setSite(String site) {
		this.site = site;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public RamoAtividade getRamoAtividade() {
		return ramoAtividade;
	}

	public void setRamoAtividade(RamoAtividade ramoAtividade) {
		this.ramoAtividade = ramoAtividade;
	}

	public Date getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	@Override
	public String toString() {
		return "Fornecedor [id=" + id + ", fantasia=" + fantasia
				+ ", razaoSocial=" + razaoSocial + ", cnpjcpf=" + cnpjcpf
				+ ", ierg=" + ierg + ", tipo=" + tipo + ", endereco="
				+ endereco + ", bairro=" + bairro + ", cidade=" + cidade
				+ ", estado=" + estado + ", fone=" + fone + ", fax=" + fax
				+ ", celular=" + celular + ", cep=" + cep + ", contato="
				+ contato + ", email=" + email + ", site=" + site
				+ ", complemento=" + complemento + ", ramoAtividade="
				+ ramoAtividade + ", dataCadastro=" + dataCadastro + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Fornecedor other = (Fornecedor) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
	
}
